package com.azthink.chapter231.repository;

import com.azthink.chapter231.domain.User;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Modifying;
import org.springframework.data.jpa.repository.Query;

import java.util.Collection;
import java.util.List;

public interface UserRepository extends JpaRepository<User, Long> {

    //自定义的查询方法

    /**
     * 通过用户名查询用户信息
     * @param username
     * @return
     */
    User findByUsername(String username);

    /**
     * 通过用户名和密码查询用户信息
     * @param username
     * @param password
     * @return
     */
    User findByUsernameAndPassword(String username, String password);

    /**
     * 按性别统计数量
     * @param gender
     * @return
     */
    long countByGender(Integer gender);

    /**
     * 按性别集合统计数量
     * @param genderArgs
     * @return
     */
    long countByGenderIn(Collection<Integer> genderArgs);

    /**
     * 通过性别获取会员数据（分页）
     * @param gender
     * @param pageable
     * @return
     */
    Page<User> findByGender(Integer gender, Pageable pageable);

    /**
     * 通过性别获取会员数据（分页）
     * @param gender
     * @param pageable
     * @return
     */
    Page<User> findByGenderAndUsernameLike(Integer gender, String username, Pageable pageable);


    /**
     * 通过性别查询，结果进行倒序排序
     * @param gender
     * @return
     */
    List<User> findByGenderOrderByIdDesc(Integer gender);

    /**
     * 通过自定义sql查询
     * @return
     */
    @Query(value = "select count(id) from User", name = "cc")
    long countByMyself();


}
